package cn.learn.activiti.interceptor;

import org.activiti.engine.impl.TaskQueryImpl;
import org.activiti.engine.impl.cmd.SetProcessInstanceNameCmd;
import org.activiti.engine.impl.cmd.StartProcessInstanceCmd;
import org.activiti.engine.impl.interceptor.AbstractCommandInterceptor;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandConfig;

/**
 * 拦截器
 * 拦截器类似监听器，只不过全局拦截数据更全面，在流程启动前，过程中，有会有相关拦截输出
 *
 * @author huangyezhan
 * @version 1.0
 * @date 2021年03月18日13:07
 */
public class MyCommandInterceptor extends AbstractCommandInterceptor {

    @Override
    public <T> T execute(CommandConfig config, Command<T> command) {
        System.out.println("拦截器执行command.getClass().getName()：" + command.getClass().getName());
        /*System.out.println("拦截器执行command.getClass().toString()：" + command.getClass().toString());
        System.out.println("拦截器执行command.getClass().getComponentType()：" + command.getClass().getComponentType());
        System.out.println("拦截器执行config.toString()：" + config.toString());
        System.out.println("拦截器执行config.getTransactionPropagation().name()：" + config.getTransactionPropagation().name());
        System.out.println("拦截器执行config.getTransactionPropagation().toString()：" + config.getTransactionPropagation().toString());
        System.out.println("拦截器执行config.getTransactionPropagation().getDeclaringClass().getName()：" + config.getTransactionPropagation().getDeclaringClass().getName());*/
        System.out.println("拦截器执行config.transactionRequired().toString()：" + config.transactionRequired().toString());
        if (command instanceof StartProcessInstanceCmd) {
            System.out.println("======================================StartProcessInstanceCmd======================================");
        }
        if (command instanceof SetProcessInstanceNameCmd) {
            System.out.println("======================================SetProcessInstanceNameCmd======================================");
        }
        if (command instanceof TaskQueryImpl){
            System.out.println("=======================TaskQueryImpl=========================");
        }
        return this.getNext().execute(config, command);
    }

}